package com.jml.auth.server.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.stereotype.Component;

/*
当前项目为认证授权中心
 */
@Component
@EnableAuthorizationServer   //表示开启当前项目为认证授权中心
public class AuthorizationConfig extends AuthorizationServerConfigurerAdapter {
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        //允许表单提交，检查accessToken是否有效期的情况下要加这个配置
        security.allowFormAuthenticationForClients()
                .checkTokenAccess("permitAll()");
    }

    /**
     * 分配我们的appid和appkey 或者叫  clentid clientkey  ，叫法不一样但是意思一样
     * @param clients
     * @throws Exception
     */
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {


 /*       clients.inMemory()
                // appid
                .withClient("jml")
                // appsecret
                .secret(passwordEncoder.encode("jml_secret"))
                // 授权码
                .authorizedGrantTypes("authorization_code")
                // 作用域,all表示所有接口都可以访问，  如果是member-service表示只能访问member-service的接口不能访问其他服务的接口
                .scopes("all")
                // 资源的id
                .resourceIds("jml_resource")
                // 回调地址  用户选择授权之后跳转到该地址传递授权码
                .redirectUris("http://www.jml.com/callback");*/

        // 读数据库  现在是写死的，如果该数据库的，那么久查出数据后在放入下面写死的的参数
        clients.inMemory()
                // appid
                .withClient("jml_appid")
                .secret(passwordEncoder.encode("jml_pwd"))
                // 授权码
                .authorizedGrantTypes("authorization_code")
                // 作用域 表示所有的接口都可以访问 分配我们的appid 调用接口的权限
                .scopes("all")
                //要和资源服务的id一致
                .resourceIds("jml_resource")
                // 用户选择授权之后，跳转到该地址传递code授权码
                .redirectUris("http://www.jml.com/callback");
    }
}